// Licensed to Elasticsearch B.V under one or more agreements.
// Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information.
//
// ███╗   ██╗ ██████╗ ████████╗██╗ ██████╗███████╗
// ████╗  ██║██╔═══██╗╚══██╔══╝██║██╔════╝██╔════╝
// ██╔██╗ ██║██║   ██║   ██║   ██║██║     █████╗
// ██║╚██╗██║██║   ██║   ██║   ██║██║     ██╔══╝
// ██║ ╚████║╚██████╔╝   ██║   ██║╚██████╗███████╗
// ╚═╝  ╚═══╝ ╚═════╝    ╚═╝   ╚═╝ ╚═════╝╚══════╝
// ------------------------------------------------
//
// This file is automatically generated.
// Please do not edit these files manually.
//
// ------------------------------------------------

#nullable restore

using Elastic.Clients.Elasticsearch.Core;
using Elastic.Clients.Elasticsearch.Fluent;
using Elastic.Clients.Elasticsearch.Serialization;
using Elastic.Transport;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Elastic.Clients.Elasticsearch.Mapping;

public partial class Properties : IsADictionary<Elastic.Clients.Elasticsearch.PropertyName, IProperty>
{
	public Properties()
	{
	}

	public Properties(IDictionary<Elastic.Clients.Elasticsearch.PropertyName, IProperty> container) : base(container)
	{
	}

	public void Add(Elastic.Clients.Elasticsearch.PropertyName name, IProperty property) => BackingDictionary.Add(Sanitize(name), property);
	public bool TryGetProperty(Elastic.Clients.Elasticsearch.PropertyName name, [NotNullWhen(returnValue: true)] out IProperty property) => BackingDictionary.TryGetValue(Sanitize(name), out property);

	public bool TryGetProperty<T>(Elastic.Clients.Elasticsearch.PropertyName name, [NotNullWhen(returnValue: true)] out T? property) where T : class, IProperty
	{
		if (BackingDictionary.TryGetValue(Sanitize(name), out var matchedValue) && matchedValue is T finalValue)
		{
			property = finalValue;
			return true;
		}

		property = null;
		return false;
	}
}

public sealed partial class PropertiesDescriptor<TDocument> : IsADictionaryDescriptor<PropertiesDescriptor<TDocument>, Properties, Elastic.Clients.Elasticsearch.PropertyName, IProperty>
{
	public PropertiesDescriptor() : base(new Properties())
	{
	}

	public PropertiesDescriptor(Properties properties) : base(properties ?? new Properties())
	{
	}

	public PropertiesDescriptor<TDocument> AggregateMetricDouble(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>, AggregateMetricDoubleProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> AggregateMetricDouble(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>, AggregateMetricDoubleProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> AggregateMetricDouble(Elastic.Clients.Elasticsearch.PropertyName propertyName, AggregateMetricDoubleProperty aggregateMetricDoubleProperty) => AssignVariant(propertyName, aggregateMetricDoubleProperty);
	public PropertiesDescriptor<TDocument> AggregateMetricDouble(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>, AggregateMetricDoubleProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> AggregateMetricDouble(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoublePropertyDescriptor<TDocument>, AggregateMetricDoubleProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Binary(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>, BinaryProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Binary(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>, BinaryProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Binary(Elastic.Clients.Elasticsearch.PropertyName propertyName, BinaryProperty binaryProperty) => AssignVariant(propertyName, binaryProperty);
	public PropertiesDescriptor<TDocument> Binary(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>, BinaryProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Binary(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BinaryPropertyDescriptor<TDocument>, BinaryProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Boolean(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>, BooleanProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Boolean(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>, BooleanProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Boolean(Elastic.Clients.Elasticsearch.PropertyName propertyName, BooleanProperty booleanProperty) => AssignVariant(propertyName, booleanProperty);
	public PropertiesDescriptor<TDocument> Boolean(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>, BooleanProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Boolean(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.BooleanPropertyDescriptor<TDocument>, BooleanProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ByteNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>, ByteNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ByteNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>, ByteNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ByteNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, ByteNumberProperty byteNumberProperty) => AssignVariant(propertyName, byteNumberProperty);
	public PropertiesDescriptor<TDocument> ByteNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>, ByteNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ByteNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ByteNumberPropertyDescriptor<TDocument>, ByteNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Completion(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>, CompletionProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Completion(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>, CompletionProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Completion(Elastic.Clients.Elasticsearch.PropertyName propertyName, CompletionProperty completionProperty) => AssignVariant(propertyName, completionProperty);
	public PropertiesDescriptor<TDocument> Completion(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>, CompletionProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Completion(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.CompletionPropertyDescriptor<TDocument>, CompletionProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ConstantKeyword(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>, ConstantKeywordProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ConstantKeyword(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>, ConstantKeywordProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ConstantKeyword(Elastic.Clients.Elasticsearch.PropertyName propertyName, ConstantKeywordProperty constantKeywordProperty) => AssignVariant(propertyName, constantKeywordProperty);
	public PropertiesDescriptor<TDocument> ConstantKeyword(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>, ConstantKeywordProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ConstantKeyword(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordPropertyDescriptor<TDocument>, ConstantKeywordProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DateNanos(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>, DateNanosProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DateNanos(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>, DateNanosProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DateNanos(Elastic.Clients.Elasticsearch.PropertyName propertyName, DateNanosProperty dateNanosProperty) => AssignVariant(propertyName, dateNanosProperty);
	public PropertiesDescriptor<TDocument> DateNanos(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>, DateNanosProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DateNanos(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateNanosPropertyDescriptor<TDocument>, DateNanosProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Date(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>, DateProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Date(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>, DateProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Date(Elastic.Clients.Elasticsearch.PropertyName propertyName, DateProperty dateProperty) => AssignVariant(propertyName, dateProperty);
	public PropertiesDescriptor<TDocument> Date(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>, DateProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Date(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DatePropertyDescriptor<TDocument>, DateProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DateRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>, DateRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DateRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>, DateRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DateRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, DateRangeProperty dateRangeProperty) => AssignVariant(propertyName, dateRangeProperty);
	public PropertiesDescriptor<TDocument> DateRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>, DateRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DateRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DateRangePropertyDescriptor<TDocument>, DateRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DenseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>, DenseVectorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DenseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>, DenseVectorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DenseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName, DenseVectorProperty denseVectorProperty) => AssignVariant(propertyName, denseVectorProperty);
	public PropertiesDescriptor<TDocument> DenseVector(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>, DenseVectorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DenseVector(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DenseVectorPropertyDescriptor<TDocument>, DenseVectorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DoubleNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>, DoubleNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DoubleNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>, DoubleNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DoubleNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, DoubleNumberProperty doubleNumberProperty) => AssignVariant(propertyName, doubleNumberProperty);
	public PropertiesDescriptor<TDocument> DoubleNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>, DoubleNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DoubleNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberPropertyDescriptor<TDocument>, DoubleNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DoubleRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>, DoubleRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DoubleRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>, DoubleRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> DoubleRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, DoubleRangeProperty doubleRangeProperty) => AssignVariant(propertyName, doubleRangeProperty);
	public PropertiesDescriptor<TDocument> DoubleRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>, DoubleRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> DoubleRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DoubleRangePropertyDescriptor<TDocument>, DoubleRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Dynamic(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>, DynamicProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Dynamic(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>, DynamicProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Dynamic(Elastic.Clients.Elasticsearch.PropertyName propertyName, DynamicProperty dynamicProperty) => AssignVariant(propertyName, dynamicProperty);
	public PropertiesDescriptor<TDocument> Dynamic(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>, DynamicProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Dynamic(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.DynamicPropertyDescriptor<TDocument>, DynamicProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FieldAlias(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>, FieldAliasProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FieldAlias(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>, FieldAliasProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FieldAlias(Elastic.Clients.Elasticsearch.PropertyName propertyName, FieldAliasProperty fieldAliasProperty) => AssignVariant(propertyName, fieldAliasProperty);
	public PropertiesDescriptor<TDocument> FieldAlias(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>, FieldAliasProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FieldAlias(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FieldAliasPropertyDescriptor<TDocument>, FieldAliasProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Flattened(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>, FlattenedProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Flattened(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>, FlattenedProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Flattened(Elastic.Clients.Elasticsearch.PropertyName propertyName, FlattenedProperty flattenedProperty) => AssignVariant(propertyName, flattenedProperty);
	public PropertiesDescriptor<TDocument> Flattened(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>, FlattenedProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Flattened(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FlattenedPropertyDescriptor<TDocument>, FlattenedProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>, FloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>, FloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, FloatNumberProperty floatNumberProperty) => AssignVariant(propertyName, floatNumberProperty);
	public PropertiesDescriptor<TDocument> FloatNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>, FloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FloatNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatNumberPropertyDescriptor<TDocument>, FloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FloatRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>, FloatRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FloatRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>, FloatRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> FloatRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, FloatRangeProperty floatRangeProperty) => AssignVariant(propertyName, floatRangeProperty);
	public PropertiesDescriptor<TDocument> FloatRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>, FloatRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> FloatRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.FloatRangePropertyDescriptor<TDocument>, FloatRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> GeoPoint(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>, GeoPointProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> GeoPoint(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>, GeoPointProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> GeoPoint(Elastic.Clients.Elasticsearch.PropertyName propertyName, GeoPointProperty geoPointProperty) => AssignVariant(propertyName, geoPointProperty);
	public PropertiesDescriptor<TDocument> GeoPoint(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>, GeoPointProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> GeoPoint(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoPointPropertyDescriptor<TDocument>, GeoPointProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> GeoShape(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>, GeoShapeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> GeoShape(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>, GeoShapeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> GeoShape(Elastic.Clients.Elasticsearch.PropertyName propertyName, GeoShapeProperty geoShapeProperty) => AssignVariant(propertyName, geoShapeProperty);
	public PropertiesDescriptor<TDocument> GeoShape(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>, GeoShapeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> GeoShape(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.GeoShapePropertyDescriptor<TDocument>, GeoShapeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> HalfFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>, HalfFloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> HalfFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>, HalfFloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> HalfFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, HalfFloatNumberProperty halfFloatNumberProperty) => AssignVariant(propertyName, halfFloatNumberProperty);
	public PropertiesDescriptor<TDocument> HalfFloatNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>, HalfFloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> HalfFloatNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberPropertyDescriptor<TDocument>, HalfFloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Histogram(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>, HistogramProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Histogram(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>, HistogramProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Histogram(Elastic.Clients.Elasticsearch.PropertyName propertyName, HistogramProperty histogramProperty) => AssignVariant(propertyName, histogramProperty);
	public PropertiesDescriptor<TDocument> Histogram(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>, HistogramProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Histogram(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.HistogramPropertyDescriptor<TDocument>, HistogramProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IcuCollation(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>, IcuCollationProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IcuCollation(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>, IcuCollationProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IcuCollation(Elastic.Clients.Elasticsearch.PropertyName propertyName, IcuCollationProperty icuCollationProperty) => AssignVariant(propertyName, icuCollationProperty);
	public PropertiesDescriptor<TDocument> IcuCollation(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>, IcuCollationProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IcuCollation(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IcuCollationPropertyDescriptor<TDocument>, IcuCollationProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IntegerNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>, IntegerNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IntegerNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>, IntegerNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IntegerNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, IntegerNumberProperty integerNumberProperty) => AssignVariant(propertyName, integerNumberProperty);
	public PropertiesDescriptor<TDocument> IntegerNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>, IntegerNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IntegerNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberPropertyDescriptor<TDocument>, IntegerNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IntegerRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>, IntegerRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IntegerRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>, IntegerRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IntegerRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, IntegerRangeProperty integerRangeProperty) => AssignVariant(propertyName, integerRangeProperty);
	public PropertiesDescriptor<TDocument> IntegerRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>, IntegerRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IntegerRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IntegerRangePropertyDescriptor<TDocument>, IntegerRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Ip(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>, IpProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Ip(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>, IpProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Ip(Elastic.Clients.Elasticsearch.PropertyName propertyName, IpProperty ipProperty) => AssignVariant(propertyName, ipProperty);
	public PropertiesDescriptor<TDocument> Ip(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>, IpProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Ip(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpPropertyDescriptor<TDocument>, IpProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IpRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>, IpRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IpRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>, IpRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> IpRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, IpRangeProperty ipRangeProperty) => AssignVariant(propertyName, ipRangeProperty);
	public PropertiesDescriptor<TDocument> IpRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>, IpRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> IpRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.IpRangePropertyDescriptor<TDocument>, IpRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Join(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>, JoinProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Join(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>, JoinProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Join(Elastic.Clients.Elasticsearch.PropertyName propertyName, JoinProperty joinProperty) => AssignVariant(propertyName, joinProperty);
	public PropertiesDescriptor<TDocument> Join(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>, JoinProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Join(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.JoinPropertyDescriptor<TDocument>, JoinProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Keyword(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>, KeywordProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Keyword(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>, KeywordProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Keyword(Elastic.Clients.Elasticsearch.PropertyName propertyName, KeywordProperty keywordProperty) => AssignVariant(propertyName, keywordProperty);
	public PropertiesDescriptor<TDocument> Keyword(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>, KeywordProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Keyword(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.KeywordPropertyDescriptor<TDocument>, KeywordProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> LongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>, LongNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> LongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>, LongNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> LongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, LongNumberProperty longNumberProperty) => AssignVariant(propertyName, longNumberProperty);
	public PropertiesDescriptor<TDocument> LongNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>, LongNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> LongNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongNumberPropertyDescriptor<TDocument>, LongNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> LongRange(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>, LongRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> LongRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>, LongRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> LongRange(Elastic.Clients.Elasticsearch.PropertyName propertyName, LongRangeProperty longRangeProperty) => AssignVariant(propertyName, longRangeProperty);
	public PropertiesDescriptor<TDocument> LongRange(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>, LongRangeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> LongRange(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.LongRangePropertyDescriptor<TDocument>, LongRangeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> MatchOnlyText(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>, MatchOnlyTextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> MatchOnlyText(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>, MatchOnlyTextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> MatchOnlyText(Elastic.Clients.Elasticsearch.PropertyName propertyName, MatchOnlyTextProperty matchOnlyTextProperty) => AssignVariant(propertyName, matchOnlyTextProperty);
	public PropertiesDescriptor<TDocument> MatchOnlyText(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>, MatchOnlyTextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> MatchOnlyText(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextPropertyDescriptor<TDocument>, MatchOnlyTextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Murmur3Hash(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>, Murmur3HashProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Murmur3Hash(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>, Murmur3HashProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Murmur3Hash(Elastic.Clients.Elasticsearch.PropertyName propertyName, Murmur3HashProperty murmur3HashProperty) => AssignVariant(propertyName, murmur3HashProperty);
	public PropertiesDescriptor<TDocument> Murmur3Hash(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>, Murmur3HashProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Murmur3Hash(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashPropertyDescriptor<TDocument>, Murmur3HashProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Nested(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>, NestedProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Nested(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>, NestedProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Nested(Elastic.Clients.Elasticsearch.PropertyName propertyName, NestedProperty nestedProperty) => AssignVariant(propertyName, nestedProperty);
	public PropertiesDescriptor<TDocument> Nested(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>, NestedProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Nested(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.NestedPropertyDescriptor<TDocument>, NestedProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Object(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>, ObjectProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Object(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>, ObjectProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Object(Elastic.Clients.Elasticsearch.PropertyName propertyName, ObjectProperty objectProperty) => AssignVariant(propertyName, objectProperty);
	public PropertiesDescriptor<TDocument> Object(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>, ObjectProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Object(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ObjectPropertyDescriptor<TDocument>, ObjectProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Percolator(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>, PercolatorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Percolator(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>, PercolatorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Percolator(Elastic.Clients.Elasticsearch.PropertyName propertyName, PercolatorProperty percolatorProperty) => AssignVariant(propertyName, percolatorProperty);
	public PropertiesDescriptor<TDocument> Percolator(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>, PercolatorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Percolator(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PercolatorPropertyDescriptor<TDocument>, PercolatorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Point(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>, PointProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Point(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>, PointProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Point(Elastic.Clients.Elasticsearch.PropertyName propertyName, PointProperty pointProperty) => AssignVariant(propertyName, pointProperty);
	public PropertiesDescriptor<TDocument> Point(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>, PointProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Point(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.PointPropertyDescriptor<TDocument>, PointProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> RankFeature(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>, RankFeatureProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> RankFeature(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>, RankFeatureProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> RankFeature(Elastic.Clients.Elasticsearch.PropertyName propertyName, RankFeatureProperty rankFeatureProperty) => AssignVariant(propertyName, rankFeatureProperty);
	public PropertiesDescriptor<TDocument> RankFeature(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>, RankFeatureProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> RankFeature(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturePropertyDescriptor<TDocument>, RankFeatureProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> RankFeatures(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>, RankFeaturesProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> RankFeatures(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>, RankFeaturesProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> RankFeatures(Elastic.Clients.Elasticsearch.PropertyName propertyName, RankFeaturesProperty rankFeaturesProperty) => AssignVariant(propertyName, rankFeaturesProperty);
	public PropertiesDescriptor<TDocument> RankFeatures(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>, RankFeaturesProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> RankFeatures(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesPropertyDescriptor<TDocument>, RankFeaturesProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ScaledFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>, ScaledFloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ScaledFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>, ScaledFloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ScaledFloatNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, ScaledFloatNumberProperty scaledFloatNumberProperty) => AssignVariant(propertyName, scaledFloatNumberProperty);
	public PropertiesDescriptor<TDocument> ScaledFloatNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>, ScaledFloatNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ScaledFloatNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberPropertyDescriptor<TDocument>, ScaledFloatNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SearchAsYouType(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>, SearchAsYouTypeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SearchAsYouType(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>, SearchAsYouTypeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SearchAsYouType(Elastic.Clients.Elasticsearch.PropertyName propertyName, SearchAsYouTypeProperty searchAsYouTypeProperty) => AssignVariant(propertyName, searchAsYouTypeProperty);
	public PropertiesDescriptor<TDocument> SearchAsYouType(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>, SearchAsYouTypeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SearchAsYouType(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypePropertyDescriptor<TDocument>, SearchAsYouTypeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SemanticText(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor, SemanticTextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SemanticText(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor, SemanticTextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SemanticText(Elastic.Clients.Elasticsearch.PropertyName propertyName, SemanticTextProperty semanticTextProperty) => AssignVariant(propertyName, semanticTextProperty);
	public PropertiesDescriptor<TDocument> SemanticText(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor, SemanticTextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SemanticText(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SemanticTextPropertyDescriptor, SemanticTextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Shape(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>, ShapeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Shape(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>, ShapeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Shape(Elastic.Clients.Elasticsearch.PropertyName propertyName, ShapeProperty shapeProperty) => AssignVariant(propertyName, shapeProperty);
	public PropertiesDescriptor<TDocument> Shape(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>, ShapeProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Shape(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShapePropertyDescriptor<TDocument>, ShapeProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ShortNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>, ShortNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ShortNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>, ShortNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> ShortNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, ShortNumberProperty shortNumberProperty) => AssignVariant(propertyName, shortNumberProperty);
	public PropertiesDescriptor<TDocument> ShortNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>, ShortNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> ShortNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.ShortNumberPropertyDescriptor<TDocument>, ShortNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SparseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>, SparseVectorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SparseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>, SparseVectorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> SparseVector(Elastic.Clients.Elasticsearch.PropertyName propertyName, SparseVectorProperty sparseVectorProperty) => AssignVariant(propertyName, sparseVectorProperty);
	public PropertiesDescriptor<TDocument> SparseVector(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>, SparseVectorProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> SparseVector(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.SparseVectorPropertyDescriptor<TDocument>, SparseVectorProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Text(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>, TextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Text(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>, TextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Text(Elastic.Clients.Elasticsearch.PropertyName propertyName, TextProperty textProperty) => AssignVariant(propertyName, textProperty);
	public PropertiesDescriptor<TDocument> Text(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>, TextProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Text(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TextPropertyDescriptor<TDocument>, TextProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> TokenCount(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>, TokenCountProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> TokenCount(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>, TokenCountProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> TokenCount(Elastic.Clients.Elasticsearch.PropertyName propertyName, TokenCountProperty tokenCountProperty) => AssignVariant(propertyName, tokenCountProperty);
	public PropertiesDescriptor<TDocument> TokenCount(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>, TokenCountProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> TokenCount(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.TokenCountPropertyDescriptor<TDocument>, TokenCountProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> UnsignedLongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>, UnsignedLongNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> UnsignedLongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>, UnsignedLongNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> UnsignedLongNumber(Elastic.Clients.Elasticsearch.PropertyName propertyName, UnsignedLongNumberProperty unsignedLongNumberProperty) => AssignVariant(propertyName, unsignedLongNumberProperty);
	public PropertiesDescriptor<TDocument> UnsignedLongNumber(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>, UnsignedLongNumberProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> UnsignedLongNumber(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberPropertyDescriptor<TDocument>, UnsignedLongNumberProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Version(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>, VersionProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Version(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>, VersionProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Version(Elastic.Clients.Elasticsearch.PropertyName propertyName, VersionProperty versionProperty) => AssignVariant(propertyName, versionProperty);
	public PropertiesDescriptor<TDocument> Version(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>, VersionProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Version(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.VersionPropertyDescriptor<TDocument>, VersionProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Wildcard(Elastic.Clients.Elasticsearch.PropertyName propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>, WildcardProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Wildcard(Elastic.Clients.Elasticsearch.PropertyName propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>, WildcardProperty>(propertyName, configure);
	public PropertiesDescriptor<TDocument> Wildcard(Elastic.Clients.Elasticsearch.PropertyName propertyName, WildcardProperty wildcardProperty) => AssignVariant(propertyName, wildcardProperty);
	public PropertiesDescriptor<TDocument> Wildcard(Expression<Func<TDocument, object>> propertyName) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>, WildcardProperty>(propertyName, null);
	public PropertiesDescriptor<TDocument> Wildcard(Expression<Func<TDocument, object>> propertyName, Action<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>> configure) => AssignVariant<Elastic.Clients.Elasticsearch.Mapping.WildcardPropertyDescriptor<TDocument>, WildcardProperty>(propertyName, configure);
}

internal sealed partial class PropertyInterfaceConverter : JsonConverter<IProperty>
{
	public override IProperty Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
	{
		var copiedReader = reader;
		string? type = null;
		using var jsonDoc = JsonDocument.ParseValue(ref copiedReader);
		if (jsonDoc is not null && jsonDoc.RootElement.TryGetProperty("type", out var readType) && readType.ValueKind == JsonValueKind.String)
		{
			type = readType.ToString();
		}

		switch (type)
		{
			case "aggregate_metric_double":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoubleProperty>(ref reader, options);
			case "binary":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.BinaryProperty>(ref reader, options);
			case "boolean":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.BooleanProperty>(ref reader, options);
			case "byte":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ByteNumberProperty>(ref reader, options);
			case "completion":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.CompletionProperty>(ref reader, options);
			case "constant_keyword":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordProperty>(ref reader, options);
			case "date_nanos":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DateNanosProperty>(ref reader, options);
			case "date":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DateProperty>(ref reader, options);
			case "date_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DateRangeProperty>(ref reader, options);
			case "dense_vector":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DenseVectorProperty>(ref reader, options);
			case "double":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DoubleNumberProperty>(ref reader, options);
			case "double_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DoubleRangeProperty>(ref reader, options);
			case "{dynamic_type}":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.DynamicProperty>(ref reader, options);
			case "alias":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.FieldAliasProperty>(ref reader, options);
			case "flattened":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.FlattenedProperty>(ref reader, options);
			case "float":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.FloatNumberProperty>(ref reader, options);
			case "float_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.FloatRangeProperty>(ref reader, options);
			case "geo_point":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.GeoPointProperty>(ref reader, options);
			case "geo_shape":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.GeoShapeProperty>(ref reader, options);
			case "half_float":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberProperty>(ref reader, options);
			case "histogram":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.HistogramProperty>(ref reader, options);
			case "icu_collation_keyword":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.IcuCollationProperty>(ref reader, options);
			case "integer":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.IntegerNumberProperty>(ref reader, options);
			case "integer_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.IntegerRangeProperty>(ref reader, options);
			case "ip":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.IpProperty>(ref reader, options);
			case "ip_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.IpRangeProperty>(ref reader, options);
			case "join":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.JoinProperty>(ref reader, options);
			case "keyword":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.KeywordProperty>(ref reader, options);
			case "long":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.LongNumberProperty>(ref reader, options);
			case "long_range":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.LongRangeProperty>(ref reader, options);
			case "match_only_text":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextProperty>(ref reader, options);
			case "murmur3":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.Murmur3HashProperty>(ref reader, options);
			case "nested":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.NestedProperty>(ref reader, options);
			case "object":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ObjectProperty>(ref reader, options);
			case "percolator":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.PercolatorProperty>(ref reader, options);
			case "point":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.PointProperty>(ref reader, options);
			case "rank_feature":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.RankFeatureProperty>(ref reader, options);
			case "rank_features":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.RankFeaturesProperty>(ref reader, options);
			case "scaled_float":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberProperty>(ref reader, options);
			case "search_as_you_type":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypeProperty>(ref reader, options);
			case "semantic_text":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.SemanticTextProperty>(ref reader, options);
			case "shape":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ShapeProperty>(ref reader, options);
			case "short":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ShortNumberProperty>(ref reader, options);
			case "sparse_vector":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.SparseVectorProperty>(ref reader, options);
			case "text":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.TextProperty>(ref reader, options);
			case "token_count":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.TokenCountProperty>(ref reader, options);
			case "unsigned_long":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberProperty>(ref reader, options);
			case "version":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.VersionProperty>(ref reader, options);
			case "wildcard":
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.WildcardProperty>(ref reader, options);
			default:
				return JsonSerializer.Deserialize<Elastic.Clients.Elasticsearch.Mapping.ObjectProperty>(ref reader, options);
		}
	}

	public override void Write(Utf8JsonWriter writer, IProperty value, JsonSerializerOptions options)
	{
		if (value is null)
		{
			writer.WriteNullValue();
			return;
		}

		switch (value.Type)
		{
			case "aggregate_metric_double":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.AggregateMetricDoubleProperty), options);
				return;
			case "binary":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.BinaryProperty), options);
				return;
			case "boolean":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.BooleanProperty), options);
				return;
			case "byte":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ByteNumberProperty), options);
				return;
			case "completion":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.CompletionProperty), options);
				return;
			case "constant_keyword":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ConstantKeywordProperty), options);
				return;
			case "date_nanos":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DateNanosProperty), options);
				return;
			case "date":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DateProperty), options);
				return;
			case "date_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DateRangeProperty), options);
				return;
			case "dense_vector":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DenseVectorProperty), options);
				return;
			case "double":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DoubleNumberProperty), options);
				return;
			case "double_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DoubleRangeProperty), options);
				return;
			case "{dynamic_type}":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.DynamicProperty), options);
				return;
			case "alias":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.FieldAliasProperty), options);
				return;
			case "flattened":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.FlattenedProperty), options);
				return;
			case "float":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.FloatNumberProperty), options);
				return;
			case "float_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.FloatRangeProperty), options);
				return;
			case "geo_point":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.GeoPointProperty), options);
				return;
			case "geo_shape":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.GeoShapeProperty), options);
				return;
			case "half_float":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.HalfFloatNumberProperty), options);
				return;
			case "histogram":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.HistogramProperty), options);
				return;
			case "icu_collation_keyword":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.IcuCollationProperty), options);
				return;
			case "integer":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.IntegerNumberProperty), options);
				return;
			case "integer_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.IntegerRangeProperty), options);
				return;
			case "ip":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.IpProperty), options);
				return;
			case "ip_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.IpRangeProperty), options);
				return;
			case "join":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.JoinProperty), options);
				return;
			case "keyword":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.KeywordProperty), options);
				return;
			case "long":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.LongNumberProperty), options);
				return;
			case "long_range":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.LongRangeProperty), options);
				return;
			case "match_only_text":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.MatchOnlyTextProperty), options);
				return;
			case "murmur3":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.Murmur3HashProperty), options);
				return;
			case "nested":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.NestedProperty), options);
				return;
			case "object":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ObjectProperty), options);
				return;
			case "percolator":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.PercolatorProperty), options);
				return;
			case "point":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.PointProperty), options);
				return;
			case "rank_feature":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.RankFeatureProperty), options);
				return;
			case "rank_features":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.RankFeaturesProperty), options);
				return;
			case "scaled_float":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ScaledFloatNumberProperty), options);
				return;
			case "search_as_you_type":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.SearchAsYouTypeProperty), options);
				return;
			case "semantic_text":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.SemanticTextProperty), options);
				return;
			case "shape":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ShapeProperty), options);
				return;
			case "short":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.ShortNumberProperty), options);
				return;
			case "sparse_vector":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.SparseVectorProperty), options);
				return;
			case "text":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.TextProperty), options);
				return;
			case "token_count":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.TokenCountProperty), options);
				return;
			case "unsigned_long":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.UnsignedLongNumberProperty), options);
				return;
			case "version":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.VersionProperty), options);
				return;
			case "wildcard":
				JsonSerializer.Serialize(writer, value, typeof(Elastic.Clients.Elasticsearch.Mapping.WildcardProperty), options);
				return;
			default:
				var type = value.GetType();
				JsonSerializer.Serialize(writer, value, type, options);
				return;
		}
	}
}

[JsonConverter(typeof(PropertyInterfaceConverter))]
public partial interface IProperty
{
	public string? Type { get; }
}